package com.atguigu.JVMDay01;

import jdk.jfr.DataAmount;
import lombok.Data;

import javax.xml.transform.Source;

//类加载器的分类  3+1
/*
启动类加载器(BootstrapClassLoader):由C++实现,或者可以叫根加载器
扩展类加载器(PlatformClassLoader):由Java实现，派生类自ClassLoader类
应用程序类加载器(AppClassLoader):也叫系统类加载器，由java实现，派生自ClassLoader类
自定义加载器:程序员可以定制类的加载方式，派生自ClassLoader类

 */
public class ClassLoaderDemo {
    public static void main(String[] args) {
        Object o = new Object();
        //输出为null，因为Object是祖宗类，他的类加载器是BootstrapClassLoader,由C++实现，java无法显示
        System.out.println(o.getClass().getClassLoader());
        //此处用到了反射！！！！
        /*
        正射：有类模板，以这个模板为范本，new出来一个具体实例，这个叫做正射
        反射正好相反，例如，收到快递了可以反向回溯查询是哪个快递公司，哪个快递员进行派送
        所以反射就是   由new出来的实例去看模板信息
         */
        System.out.println("======================");
        Fish fish = new Fish();
        System.out.println(fish.getClass().getClassLoader());//AppClassLoader
        System.out.println(fish.getClass().getClassLoader().getParent());
        System.out.println(fish.getClass().getClassLoader().getParent().getParent());
    }

    @Data
   static class Fish{
        String name;
        Integer age;
        public Fish(){

        }
        public void eat(){
            System.out.println("小鱼吃东西！！");
        }
    }

}
